同型性の本質
同型性言語:内部表現が言語自身の中で表される言語。エリクサーでは、ソースコードは単なるテキストではなく、ネストされたデータ構造として知られる 抽象構文木(AST)。
1. 表現の論理ルール
エリクサーは基本的なリテラルを自らの形で表現することで、抽象構文木(AST)を簡素化します。アトム、数値、リスト(キーワードリストを含む)、バイナリ、2要素のタプルは、複雑なラッピングなしに内部的に表現されます。
iex> quote do: [do: 1]
[do: 1]
iex> quote do: "binaries"
"binaries"
[do: 1]
iex> quote do: "binaries"
"binaries"
2. ASTのタプル構造
ほとんどのコード変換は3要素のタプルになります: {関数名, メタデータ, 引数}。たとえば、関数呼び出し 1 + 2 は {:+, [line: 1], [1, 2]}となります。これにより言語は コードをデータとして扱う。
3. マクロ:実行の遅延
マクロは「プログラムの内部表現にコードを戻すことで、節の実行を遅らせる方法」です。標準関数は引数を呼び出し 前に するのに対し、マクロは 生のASTを受け取り、コンパイル前に論理を挿入できるようになります。
$$\text{ソースコード} \xrightarrow{\text{quote}} \text{ASTタプル} \xrightarrow{\text{マクロ}} \text{変換済みAST}$$
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>